package com.cleaningcloud.cld.utils;

import java.math.BigDecimal;

public class PositioningUtil {
    /**
     * 判断定位是否在项目中
     *
     * @param v   项目
     * @param lng 经度
     * @param lat 纬度
     * @return -1即false ，0即true但是多边形，>0即距离
     */
    public static Double checkAddressInProject(BigDecimal projectLng, BigDecimal projectLat, BigDecimal lng, BigDecimal lat) {
        if (projectLng == null || projectLat == null) {
            return -1.0;
        }
        if (lng != null && lat != null && lng.compareTo(new BigDecimal("0.000000000000")) > 0 && lat.compareTo(new BigDecimal("0.000000000000")) > 0) {
            return GeoUtil.calculateLineDistance(lat.doubleValue(), lng.doubleValue(),
                    projectLat.doubleValue(), projectLng.doubleValue());
        } else {
            return -1.0;
        }
    }

    //return the distance of two point, unit is meter
    public static double distance_2(double latitude1, double longitude1, double latitude2, double longitude2) {
        double R = 6371 * 1000;
        double phi1 = Math.toRadians(latitude1); //Math.toRadians()以度为单位的角度转            换为用弧度表示的近似相等的角度
        double phi2 = Math.toRadians(latitude2);
        double delta_phi = Math.toRadians(latitude2 - latitude1);//两个纬度之间的差值，并将其从度转换为弧度。
        double delta_lambda = Math.toRadians(longitude2 - longitude1);//两个经度之间的差值，并将其从度转换为弧度。
        double a = Math.sin(delta_phi / 2) * Math.sin(delta_phi / 2)
                + Math.cos(phi1) * Math.cos(phi2) * Math.sin(delta_lambda / 2) * Math.sin(delta_lambda / 2);//两个经纬度之间的方位角，单位为弧度
        double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));//两点之间大圆距离的一半
        return R * c;
    }

}
